package com.ziyun.erp.modules.order.service;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.service.order.constant.OrderResult;
import com.service.order.model.erp.AllotOrderResultDto;
import com.service.order.model.erp.ErpAllotFactoryOrderParamDto;
import com.ziyun.erp.modules.order.dto.*;
import com.ziyun.erp.modules.order.entity.ErpCustomerServieceUserEntity;
import com.ziyun.erp.modules.order.entity.ErpOrderEntity;
import com.ziyun.erp.modules.order.vo.ErpOrderVo;
import com.ziyun.erp.modules.order.entity.OrderInfoEntity;
import com.ziyun.erp.modules.order.vo.OrderBonusVo;
import io.renren.common.utils.PageUtils;
import io.renren.common.utils.R;
import io.renren.modules.sys.entity.SysUserEntity;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

/**
 * erp订单信息表
 *
 * @author guizhao
 * @date 2018-07-27 11:19:18
 */
public interface ErpOrderService extends IService<ErpOrderEntity> {

    /**
     * 列表查询
     *
     * @param params
     * @return
     */
    R queryPageErpOrderList(Map<String, Object> params);

    R queryPage(Map<String, Object> params);

    ErpOrderEntity selectByNo(String orderNo);

    void synProductionOrder(List<OrderInfoEntity> list);

    ErpOrderEntity selectByOrderId(Long orderId);

    ErpOrderVo selectErpOrderVoByOrderId(Long orderId);

    /**
     * 查询内部订单号
     *
     * @param orderId 订单号
     * @return
     */
    String selectOrderNoByOrderId(Long orderId);

    /**
     * 同步紫云网订单支付信息
     *
     * @param records
     */
    void synOrderPayInfo(List<OrderInfoEntity> records);

    /**
     * 同步紫云网订单确认收货信息
     *
     * @param records
     */
    void synOrderReceiveInfo(List<OrderInfoEntity> records);

    /**
     * 同步紫云网订单取消信息
     *
     * @param records
     */
    void synOrderCancleInfo(List<OrderInfoEntity> records);

    void updateByMap(Map<String, Object> upMap, String orderNo);

//    Page<ErpOrderEntity> selectNotSendConfirmPage(Page<ErpOrderEntity> page);

    Page<ErpOrderEntity> selectNotCalculateCommissionPage(Page<ErpOrderEntity> page);

    void calculateCommission(List<ErpOrderEntity> erpOrderEntityList);

    List<ErpOrderEntity> queryListByProductionId(List<String> ids);

    R receiveConfrim(FinanceReceiveMoneyDto financeReceiveMoneyDto);

    R receiveRemark(String orderNo, String receiveMoneyRemark);

    R costRecordConfirm(String orderNo, Integer costRecord);

    /**
     * 订单分配
     *
     * @param orderAllotDto
     * @return
     */
    R allotOrder(OrderAllotDto orderAllotDto);

    /**
     * 订单商品分配
     *
     * @param orderItemAllotDto
     * @return
     */
    R allotOrderItem(OrderItemAllotDto orderItemAllotDto);

    /**
     * 订单分配页面信息
     *
     * @param orderNo
     * @return
     */
    R allotInfo(String orderNo);

    /**
     * 删除分配信息
     *
     * @param productionId
     * @param orderId
     * @return
     */
    R deleteAllotItem(Integer productionId, String orderId);

    /**
     * 取消订单分配
     *
     * @param orderNo
     * @return
     */
    boolean cancelOrderAllotInfo(String orderNo);

    /**
     * 订单工艺分配
     *
     * @param orderCraftsDto
     * @return
     */
    R allotOrderCrafts(OrderCraftsDto orderCraftsDto);

    /**
     * 查询工厂信息（标品商品分配）
     *
     * @param itemId
     * @return
     */
    R orderItemAllotFindFactory(Integer itemId, Integer sellerType);

    /**
     * 查询工厂信息（报价商品分配）
     *
     * @param itemId
     * @param sellerType
     * @return
     */
    R quoteOrderItemAllotFindFactory(Integer itemId, Integer sellerType);

    /**
     * 商品工序列表
     *
     * @param itemId
     * @return
     */
    R orderCraftsInfo(Integer itemId);

    /**
     * 查询工厂信息（工艺分配）
     *
     * @param orderCraftQuoteDto
     * @return
     */
    R orderCraftAllotFindFactory(OrderCraftQuoteDto orderCraftQuoteDto);

    /**
     * 订单标记切换
     *
     * @param orderNo
     * @param orderTag
     * @return
     */
    R orderTagChange(String orderNo, Integer orderTag);

    /**
     * 查询工厂信息（订单分配）
     *
     * @param orderNo
     * @return
     */
    R orderAllotFindFactory(String orderNo);

    /**
     * 修改收货人信息
     *
     * @param erpOrder
     * @return
     */
    R orderReceiverUpdate(ErpOrderEntity erpOrder);

    /**
     * @param orderSupplierDto
     * @param userId
     * @return
     */
    R suppSave(OrderSupplierDto orderSupplierDto, Long userId);

    /**
     * 订单分配下单API调用
     *
     * @return
     */
    OrderResult<AllotOrderResultDto> orderAllotApi(ErpAllotFactoryOrderParamDto erpAllotFactoryOrderParamDto);

    R doOrderFinishJob();

    /**
     * 接单员或者客服
     *
     * @return
     */
    List<ErpCustomerServieceUserEntity> getCsOrPmcList(int i);

    /**
     * 设计商品分配
     *
     * @param orderItemAllotDto
     * @return
     */
    R allotOrderItemDesign(OrderItemAllotDto orderItemAllotDto);

    /**
     * 订单初始化
     *
     * @param orderId
     * @param userId
     * @return
     */
    R orderInit(String orderId, Long userId);

    /**
     * 计划任务：门店商城订单转生产系统
     *
     * @param sellerId 类型 0：自营，1：第三方
     * @param type
     */
    void synProduce(Integer sellerId, Integer type);

    /**
     * 计划任务：门店订单同步到orderInfo表中
     *
     * @param sellerId
     */
    void synErpOrderToOrderInfo(Integer sellerId);

    /**
     * 计划任务：商户奖励金结算
     */
    void sellerOrderReward(OrderBonusVo orderBonusVo, int multiple);

    /**
     * 商户提现
     *
     * @param sellerOrderPayDto
     * @return
     */
    R sellerOrderPay(SellerOrderPayDto sellerOrderPayDto);

    /**
     * 商户提现，生产单付款状态回写
     *
     * @param allotOrderList 提现订单号
     * @return
     */
    void sellerCashBack(List<String> allotOrderList);

    R updateDialogForm(FinanceReceiveMoneyDto financeReceiveMoneyDto, SysUserEntity curentUser);

    /**
     * 设计商品初始化
     *
     * @param eoItemId
     * @return
     */
    R resetOrderItemDesign(Integer eoItemId);

    /**
     * 计算产品阶梯价
     */
    public BigDecimal calculateStepPrice(String stepPrice, BigDecimal nums);

    /**
     * 广告物料商品价格计算
     */
    public BigDecimal calculateMaterialGoodsPrice(Long goodsId, String addon, BigDecimal price);

    /**
     * 查询订单用于成本审核
     *
     * @param params
     * @return
     */
    R queryOrderCostPage(Map<String, Object> params);

    R costOrderDetail(String orderNo);

    R batchAudit(String ids, String createName, String createBy);

    /**
     * 提成成本审核
     *
     * @param orderNo
     * @return
     */
    R auditCost(String orderNo, String createName, String createBy);

    /**
     * 成本状态撤回
     *
     * @param orderNo
     * @return
     */
    R reBackStatus(String orderNo, String createName, String createBy);

    /**
     * 成本状态批量录入
     *
     * @param ids
     * @return
     */
    R batchEnter(String ids, String createName, String createBy);

    /**
     * 外协成本录入
     *
     * @param orderSupplierDto
     * @param userId
     * @return
     */
    R costSave(OrderSupplierDto orderSupplierDto, Long userId);

    /**
     * 紫云网提成核算 OrderRoyaltyController
     *
     * @param params 列表
     * @return
     */
    R queryOrderRoyaltyPage(Map<String, Object> params);

    //订单信息
    R orderRoyaltyInfoById(String orderNo);

    //批量审核
    R toBatchAudit(String orderNos);

    //批量录入
    R batchInput(String orderNos);

    //单个审核
    R audit(String orderNo);

    //撤销审核
    R Revoke(String orderNo);

    /**
     * 同步支付信息
     */
    void synPayInfo();


}



